-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.c
49 lines (42 loc) · 1.17 KB
/
Solution.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#define MAX 100
typedef struct {
int arr[MAX];
int top;
} Stack;
void push(Stack *stack, int value) {
stack->arr[++stack->top] = value;
}
int pop(Stack *stack) {
return stack->arr[stack->top--];
}
int evaluatePostfix(char *expression) {
Stack stack = {.top = -1};
for (int i = 0; expression[i] != '\0'; i++) {
if (isdigit(expression[i])) {
push(&stack, expression[i] - '0');
} else {
int val2 = pop(&stack);
int val1 = pop(&stack);
switch (expression[i]) {
case '+': push(&stack, val1 + val2); break;
case '-': push(&stack, val1 - val2); break;
case '*': push(&stack, val1 * val2); break;
case '/': push(&stack, val1 / val2); break;
case '^': push(&stack, pow(val1, val2)); break;
}
}
}
return pop(&stack);
}
int main() {
char expression[MAX];
printf("Enter postfix expression: ");
scanf("%s", expression);
int result = evaluatePostfix(expression);
printf("Result: %d\n", result);
return 0;
}